package coba.mailing.body;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;

import coba.mailing.model.AtractivoSum;
import coba.mailing.model.FormularioCoordinador;
import coba.mailing.model.FormularioParticipante;
import coba.mailing.model.Guia;
import coba.mailing.model.Institucion;
import coba.mailing.model.Solicitud;

public class Body6 {

	static String[] arrDiasSemana = { "Domingo", "Lunes", "Martes", "Mi&eacute;rcoles", "Jueves", "Viernes", "S&aacute;bado" };

	static String[] arrMes = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio",
			"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };

	public static String get(String cid, Solicitud solicitud, List<AtractivoSum> listAtractivoSum,
			Institucion institucion, List<FormularioCoordinador> listFormularioCoordinador,
			List<FormularioParticipante> listFormularioParticipante, List<Guia> listGuia) throws IOException {

		StringBuilder sb = new StringBuilder();

		sb.append("<html>");

		sb.append("<p>Buenos d&iacute;as:</p>");

		sb.append("<p>Nos ponemos en contacto en relaci&oacute;n a la visita del <strong>");

		Calendar calFechaItinerario = GregorianCalendar.getInstance();
		calFechaItinerario.setTime(solicitud.getFechaItinerario());

		sb.append(arrDiasSemana[calFechaItinerario.get(Calendar.DAY_OF_WEEK) - 1]);

		sb.append(" ");

		sb.append(new SimpleDateFormat("dd").format(solicitud.getFechaItinerario()));

		sb.append(" de ");

		sb.append(arrMes[calFechaItinerario.get(Calendar.MONTH)]);

		sb.append("</strong>, les solicitamos por favor lean este correo completo para chequear que est&eacute; todo en orden para el d&iacute;a de la visita.</p>");

		sb.append("Les enviamos adjunta una ficha con la informaci&oacute;n del grupo, les pedimos por ");
		sb.append("favor, <strong>que revisen toda la informaci&oacute;n (cantidades, viandas especiales, ");
		sb.append("recorrido, tel&eacute;fonos de contacto, etc.) para evitar inconvenientes el d&iacute;a ");
		sb.append("de la visita.</strong> El gu&iacute;a estar&aacute; esper&aacute;ndolos <strong>en ");

		AtractivoSum primerAtractivo = listAtractivoSum.get(0);

		Long horaComienzo = primerAtractivo.getHoraComienzo() / 100;
		Long minutoComienzo = primerAtractivo.getHoraComienzo() % 100;

		String strHoraMinutoComienzo = horaComienzo + ":" + String.format("%02d", minutoComienzo);

		sb.append(primerAtractivo.getNombre());
		sb.append(" a las ");
		sb.append(strHoraMinutoComienzo);

		sb.append(" hs.</strong> Con &eacute;l se ");
		sb.append("podr&aacute;n comunicar ese d&iacute;a para coordinar el encuentro, avisar si est&aacute;n ");
		sb.append("demorados, etc.</p>");

		String coordinador = null;
		String telefono1 = null;
		String telefono2 = null;
		int i = 0;
		for (FormularioCoordinador it : listFormularioCoordinador) {
			if (i == 0) {
				coordinador = it.getApellido() + ", " + it.getNombre();
				telefono1 = it.getTelefono();
			}
			else if (i == 1) {
				telefono2 = it.getTelefono();
			}
			i ++;
		}

		sb.append("<p><strong>DATOS DEL GRUPO</strong></p>");
		table1(sb, solicitud, coordinador, telefono1, telefono2);

		sb.append("<p><strong>ALIMENTACI&Oacute;N</strong></p>");
		table2(sb, solicitud, calcularListEspecificacionesAlimenticias(listFormularioParticipante));

		sb.append("<p><strong>STAFF CONOCIENDO BA</strong></p>");
		table3(sb, solicitud, listGuia);

		sb.append("<p>Les pedimos por favor que tengan en cuenta que <strong>el transporte en el que realicen ");
		sb.append("el recorrido deber&aacute; tener dos asientos vac&iacute;os</strong> para que puedan acompa&ntilde;arlos el gu&iacute;a ");
		sb.append("y el coordinador. En caso contrario no se podr&aacute; realizar la visita.</p>");

		sb.append("<p><strong>IMPORTANTE!!!</strong> El d&iacute;a de la visita <strong>deber&aacute;n traer firmados y para entregarnos</strong> ");
		sb.append("los siguientes documentos (adjuntamos nuevamente).</p>");

		/*
		sb.append("<p><strong>- Bases y condiciones firmadas<br />");
		sb.append("- Anexo II - Transporte y fotocopia de la documentaci&oacute;n del mismo<br />");
		sb.append("- Anexo III - Salud de cada uno de los participantes (alumnos + docentes)</strong></p>");
		*/
		sb.append("<p><strong>- Anexo - Transporte y fotocopia de la documentaci&oacute;n del mismo.</strong></p>");

		sb.append("<p>A continuaci&oacute;n figura el cronograma que realizar&aacute;n:</p>");

		sb.append("<p><strong>ITINERARIO</strong></p>");
		table4(sb, solicitud, listAtractivoSum);

		sb.append("<p>EL RECORRIDO NO SE SUSPENDE POR LLUVIA. EN TAL CASO SE HAR&Aacute;N RECORRIDOS ");
		sb.append("PANOR&Aacute;MICOS Y/O AJUSTAR&Aacute;N ITINERARIOS ACORDE.</p>");

		sb.append("<p>IMPORTANTE! Estamos en una &eacute;poca de altas temperaturas, sugerimos a los ");
		sb.append("grupos traer agua para estar hidratados durante el d&iacute;a y evitar descompensaciones.</p>"); 

		sb.append("<p>Por cualquier consulta o comentario, no duden en comunicarse con Conociendo BA.</p>");

		sb.append("<p>Los esperamos!</p>");

		sb.append("<p>Saludos!</p>");

		sb.append("<p><img src=\"cid:" + cid + "\"></p>");
		
		sb.append("</html>");

		return sb.toString();
	}

	private static void table1(StringBuilder sb, Solicitud solicitud,
			String coordinador, String celular, String telefonoAlternativo) {
		sb.append("<table style=\"border:solid 1px; border-collapse: collapse; width:100%\">");
	
		sb.append("<tbody>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Modalidad</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(solicitud.getModalidad()).append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>D&iacute;a de la visita</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(new SimpleDateFormat("dd/MM/yyyy").format(solicitud.getFechaItinerario())).append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Instituci&oacute;n</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(solicitud.getNombreInstitucion()).append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Coordinador de grupo presente ese d&iacute;a</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(coordinador != null ? coordinador : "-").append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Nro de celular</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(celular != null ? celular : "-").append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Tel&eacute;fono alternativo<br />(Celular de otra persona)</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(telefonoAlternativo != null ? telefonoAlternativo : "-").append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Cant. de participantes</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(solicitud.getCantidadParticipantes()).append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Coordinadores (Responsables a cargo)</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(solicitud.getCantidadCoordinadores()).append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Participan personas con discapacidad</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(
				solicitud.getDiscapacidad() != null && !solicitud.getDiscapacidad().equals(0L) ? "Si" : "No").append("</td>");
		sb.append("</tr>");

		sb.append("</tbody>");
	
		sb.append("</table>");
	}

	private static void table2(StringBuilder sb, Solicitud solicitud,
			List<String> listEspecificacionesAlimenticias) {
		sb.append("<table style=\"border:solid 1px; border-collapse: collapse; width:100%\">");
	
		sb.append("<tbody>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Personas con alimentaci&oacute;n especial</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">").append(
				listEspecificacionesAlimenticias != null && listEspecificacionesAlimenticias.size() > 0 ? "Si" : "No").append("</td>");
		sb.append("</tr>");

		if (listEspecificacionesAlimenticias != null && listEspecificacionesAlimenticias.size() > 0) {
			sb.append("<tr>");
			sb.append("<td style=\"border:solid 1px\">").append("<strong>Viandas especiales pedidas</strong>").append("</td>");
			sb.append("<td style=\"border:solid 1px\">");
			int i = 0;
			for (String alimentacionEspecial : listEspecificacionesAlimenticias) {
				if (i++ > 0)
					sb.append("<br />");
				sb.append("1- ").append(alimentacionEspecial);
			}
			sb.append("</td>");
			sb.append("</tr>");
		}

		sb.append("</tbody>");
	
		sb.append("</table>");
	}

	private static void table3(StringBuilder sb, Solicitud solicitud, List<Guia> listGuia) {
		sb.append("<table style=\"border:solid 1px; border-collapse: collapse; width:100%\">");

		sb.append("<tbody>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Gu&iacute;a ConociendoBA</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">");
		if (listGuia.size() > 0) {
			sb.append(listGuia.get(0).getApellido());
			sb.append(", ");
			sb.append(listGuia.get(0).getNombre());
		}
		sb.append("</td>");
		sb.append("</tr>");

		sb.append("<tr>");
		sb.append("<td style=\"border:solid 1px\">").append("<strong>Tel&eacute;fono</strong>").append("</td>");
		sb.append("<td style=\"border:solid 1px\">");
		if (listGuia.size() > 0) {
			sb.append(listGuia.get(0).getTelefono());
		}
		sb.append("</td>");
		sb.append("</tr>");

		sb.append("</tbody>");
	
		sb.append("</table>");
	}

	private static void table4(StringBuilder sb, Solicitud solicitud, List<AtractivoSum> listAtractivoSum) {
		sb.append("<table style=\"border:solid 1px; border-collapse: collapse; width:100%\">");

		sb.append("<tbody>");

		for (AtractivoSum it : listAtractivoSum) {
			Long horaComienzo = it.getHoraComienzo() / 100;
			Long minutoComienzo = it.getHoraComienzo() % 100;

			String strHoraMinutoComienzo = horaComienzo + ":" + String.format("%02d", minutoComienzo);

			sb.append("<tr>");
			sb.append("<td style=\"border:solid 1px\"><strong>").append(strHoraMinutoComienzo).append("</strong></td>");
			sb.append("<td style=\"border:solid 1px\"><strong>").append(it.getNombre()).append("</strong></td>");
			sb.append("</tr>");
		}

		sb.append("</tbody>");

		sb.append("</table>");
	}

/*
	private static Long calcularListComidaEstandar(List<FormularioParticipante> listFormularioParticipante,
			List<FormularioCoordinador> listFormularioCoordinador, List<Guia> listGuia) {

		Long comidaEstandar = 0L;

		for (FormularioParticipante fp : listFormularioParticipante) {
			if (fp.getEspecificacionesAlimenticias() == null ||
					fp.getEspecificacionesAlimenticias().trim().equals("")) {
				comidaEstandar ++;
			}
		}

		comidaEstandar += listFormularioCoordinador.size();

		comidaEstandar += listGuia.size();

		return comidaEstandar;

	}
*/

	private static List<String> calcularListEspecificacionesAlimenticias(List<FormularioParticipante> listFormularioParticipante) {

		List<String> listEspecificacionesAlimenticias = new LinkedList<String>();

		for (FormularioParticipante fp : listFormularioParticipante) {
			if (fp.getEspecificacionesAlimenticias() != null &&
					!fp.getEspecificacionesAlimenticias().trim().equals("")) {
				listEspecificacionesAlimenticias.
						add(fp.getEspecificacionesAlimenticias());
			}
		}

		return listEspecificacionesAlimenticias;

	}

}
